//
//  CAPropertyAnimation.swift
//  Documentation
//
//  Created by Toj on 8/9/23.
//

/** 抽象类: 属性动画
 * 创建基于属性的动画: 子类有2个.
 * 1. CABasicAnimation: 基础动画
 * 2. CAKeyframeAnimation: 关键帧动画
 * NOTE: CAPropertyAnimation本身是一个抽象基类,不能直接使用,而是通过其子类创建具体的动画对象
 */

import QuartzCore

/** Subclass for property-based animations. **/
@available(iOS 2.0, *)
open class CAPropertyAnimation : CAAnimation {
    
    /**
     ** 缩放
     * transform.scale: 所有方向缩放, Value: CGFloat
     * transform.scale.x: x方向缩放, Value: CGFloat
     * transform.scale.y: y方向缩放, Value: CGFloat
     * transform.scale.z: z方向缩放, Value: CGFloat
     ** 平移
     * transform.translation: 移动到某点, Value: CGPoint
     * transform.translation.x: x方向, Value: CGFloat
     * transform.translation.y: y方向, Value: CGFloat
     * transform.translation.z: z方向, Value: CGFloat
     ** 旋转
     * transform.rotation: 默认围绕z轴, Value: CGFloat.pi
     * transform.rotation.x: 围绕x轴旋转, Value: CGFloat.pi
     * transform.rotation.y: 围绕y轴旋转, Value: CGFloat.pi
     * transform.rotation.z: 围绕z轴旋转, Value: CGFloat.pi
     * 阴影
     * shadowColor: 阴影颜色, Value: CGColor
     * shadowRadius: 阴影半径, Value: CGFloat
     * shadowOffset: 阴影偏移量, Value: CGFloat
     * shadowOpacity: 阴影透明度, Value: CGFloat
     ** 其他
     * cornerRadius: 圆角半径, Value: CGFloat
     * borderWidth: 边框宽度, Value: CGFloat
     * backgroundColor: 背景颜色的变化, Value: CGColor
     * bounds: 大小, 中心不变, Value: CGRect
     * position: 位置(中心点的改变), Value: CGPoint
     * contents: 内容, 可以是图片或其他视图, Value: CGImage
     * opacity: 透明度, Value: CGFloat
     * mask: 图层的掩码, 可以用于裁剪图层的可见区域
     * strokeEnd: 颜色从无到有
     * strokeStart: 颜色从有到无
     * contentsRect: 可视内容, Value: : [0, 1]
     * hidden: 是否隐藏
     */
    public convenience init(keyPath path: String?)
    
    /* The key-path describing the property to be animated. */
    
    open var keyPath: String?

    /// 同一时间段的动画是否合成展示
    /// NOTE: 使用 CAKeyframeAnimation 时必须将该属性指定为 true, 否则不会出现期待的结果.
    open var isAdditive: Bool = false

    
   /// 下一次动画执行是否接着刚才的动画
    open var isCumulative: Bool = false

    /* If non-nil a function that is applied to interpolated values
     * before they are set as the new presentation value of the animation's
     * target property. Defaults to nil. */
    /// 该属性允许你使用自定义的函数来计算属性的值, 而不仅限于默认的插值计算方式
    /// valueFunction = CAValueFunction(name: .rotateZ)
    open var valueFunction: CAValueFunction?
}
